package a10_StreamIO;

import java.io.*;
import java.util.Scanner;

/**
 * @Author quan
 * @Description 进行普通文件的复制
 * @Date 2023/5/24 20:02
 */
public class Exe02 {
    public static void main(String[] args) {
        //1、接收用户输入的源文件路径->要复制的文件
        System.out.println("请输入源文件路径(绝对路径)：");
        Scanner sc = new Scanner(System.in);
        String sourcePath = sc.next();
        //2、路径的合法性校验
        File sourceFile = new File(sourcePath);
        //2.1判断路径是否存在
        if (!sourceFile.exists()) {
            System.out.println("源文件不存在");
            return;
        }
        //2.2判断是不是一个文件
        if (!sourceFile.isFile()) {
            System.out.println("源文件不是一个有效的文件");
            return;
        }
        //3、接收用户输入：要将复制后的文件放在哪个路径下
        System.out.println("请输入目标文件路径(绝对路径)：");
        String destPath = sc.next();
        File destFile = new File(destPath);
        //3.1目标文件的合法性校验
        if(destFile.exists()){
            System.out.println("目标文件已存在");
            return;
        }
        //3.2判断目标文件的父目录是否存在
        if (!destFile.getParentFile().exists()) {
            System.out.println("目标文件的父目录不存在");
            return;
        }
        //4、循环读取源文件的内容并写入到目标文件中
        try(FileInputStream inputStream = new FileInputStream(sourceFile);
        FileOutputStream outputStream = new FileOutputStream(sourceFile)) {
            //4.1定义一个byte数组用来作为输出型参数，保存每次读取到的文件内容
            byte[] bytes = new byte[1024];
            //4.2开始循环读取内容
            while (true){
                int len = inputStream.read(bytes);
                //4.3已经读完了
                if(len == -1){
                    break;
                }
                //4.4 开始写入到目标文件中
                outputStream.write(bytes);
                //4.5 强制刷新缓冲区
                outputStream.flush();
            }
            System.out.println("复制成功");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }
    }
}
